package educar.listeners;

import java.io.File;
import java.io.FileFilter;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

public class FileUtils {
	private static final int BUFFER = 1024;

	
	/**
	 * Permite copiar un archvio desde un origen a un destino
	 * @param origen "File de origen"
	 * @param destino "File de destino"
	 * @throws IOException
	 */
	public static void copy(File origen, File destino) throws IOException {
		byte buf[] = new byte[BUFFER];
		int cant;
		FileInputStream in = new FileInputStream(origen);
		FileOutputStream out = new FileOutputStream(destino);
		while ((cant = in.read(buf, 0, BUFFER)) != -1) {
			out.write(buf, 0, cant);
		}
	}
	
	/**
	 * Renombra un archivo a otro
	 * @param origen "archivo origen"
	 * @param destino "archivo destino"
	 * @return
	 */
	public static boolean rename(File origen,File destino) {
		boolean success = origen.renameTo(destino);
		return success;
	}
	
	/**
	 * Permite mover un archvio desde un origen a un destino
	 * @param origen "File de origen"
	 * @param destino "File de destino"
	 * @throws IOException
	 */
	public static void move(File origen, File destino) throws IOException{
		copy(origen, destino);
		origen.delete();
	}
	
	/**
	 * Permite borrar un archivo
	 * @param origen "File a borrar"
	 * @throws IOException
	 */
	public static void delete(File origen) throws IOException{
		if(origen.exists()) {
			origen.delete();	
		}		
	}


	/**
	 * Valida el path de un archivo a crear
	 * @param path
	 * @param action
	 * @return
	 */
	public static boolean validateDir(String path, boolean action) {
	   File file = new File(path);
	   boolean isDirectory = file.isDirectory();
	   if (action)
	   		file.mkdirs();
	   return isDirectory;
	  }

	/**
	 * obtiene una lista de Files segun un patron o filtro
	 * puede ser una extension u otra cosa
	 * @param dir
	 * @param filtro
	 * @return
	 */
	public File[] getFilesPattern(String dir, String filtro) {
		File file = new File(dir);
		return file.listFiles(new MiFiltrador(filtro));
	}
	
	
	/**
	 * clase privada para crear un filtro de files
	 */
	private class MiFiltrador implements FileFilter {
		private String pattern = "";
		public MiFiltrador(String pattern) {
			this.pattern = pattern;
		}

		public boolean accept(File file) {
			if (file.getName().endsWith(pattern)) {
				return true;
			} else {
				return false;
			}
		}
	}
}

